package com.esir.projet.keriosity.controle;

import java.io.IOException;
import java.io.PrintWriter;
import java.rmi.Naming;
import java.rmi.NotBoundException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kercar.device.RemoteDevice;
import kercar.gps.GPSPosition;

import org.jdom2.Document;
import org.jdom2.Element;

/**
 * Envois le robot en mission avec l'envois d'une latitude d'une longitude une
 * demande de photo et une adresse.
 * 
 * @author 29002904
 * 
 */
public class Mission extends HttpServlet {

	private static final long serialVersionUID = -2926182609786785524L;
	public static final String IP = "127.0.0.1";
	public static final String NAME = "MasterChief";

	public void doGet(HttpServletRequest req, HttpServletResponse response) throws IOException, ServletException {
		response.setContentType("text/xml");
		PrintWriter out = response.getWriter();

		GPSPosition destination = new GPSPosition(0, 0);
		boolean photo = false;
		String adresse = "";

		// verification de la reception d'une latitude et d'une longitude
		if (req.getParameterMap().containsKey("lat") && req.getParameterMap().containsKey("lon")) {
			destination.setLatitude(Double.parseDouble(req.getParameter("lat")));
			destination.setLongitude(Double.parseDouble(req.getParameter("lon")));

			// verification de la demande de photo
			if (req.getParameterMap().containsKey("pho")) {
				photo = Boolean.parseBoolean(req.getParameter("pho"));
				adresse = req.getParameter("adr");
			}

			RemoteDevice remoteDevice;
			try {
				remoteDevice = (RemoteDevice) Naming.lookup("rmi://" + IP + "/" + NAME);
				remoteDevice.startRide(destination, photo, adresse);
			} catch (NotBoundException e) {
				e.printStackTrace();
				Document document = connectionError();
				out.println(document);
			}
		}
	}

	/**
	 * Permet de creer le document XML signifiant une erreur de connexion avec
	 * RSBP
	 */
	private Document connectionError() {
		Element racine = new Element("RMI_ERROR_CONNECTION");
		Document document = new Document(racine);
		return document;
	}
}